package com.pond.pond.domain;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import lombok.Getter;
import lombok.Setter;

import javax.validation.constraints.NotNull;
import javax.validation.constraints.Positive;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.Map;

/**
 * 回鱼记录实体类
 */
@Getter
@Setter
public class FishReturn implements Serializable {
    private static final long serialVersionUID = 1L;

    /** 回鱼记录ID */
    @JsonSerialize(using = ToStringSerializer.class)
    private Long id;

    /** 关联订单ID */
    @JsonSerialize(using = ToStringSerializer.class)
    @NotNull(message = "订单ID不能为空")
    private Long orderId;

    /** 回鱼类型（weight-按重量，count-按条数） */
    @NotNull(message = "回鱼类型不能为空")
    private String type;

    /** 操作管理员ID */
    @JsonSerialize(using = ToStringSerializer.class)
    @NotNull(message = "操作管理员ID不能为空")
    private Long adminId;

    /** 操作管理员姓名 */
    private String adminName;

    /** 回鱼重量（kg，按重量回鱼时必填） */
    private BigDecimal fishWeight;

    /** 回鱼条数（按条数回鱼时必填） */
    private Integer fishCount;

    /** 鱼塘ID */
    @JsonSerialize(using = ToStringSerializer.class)
    @NotNull(message = "鱼塘ID不能为空")
    private Long pondId;

    /** 鱼塘名称 */
    private String pondName;

    /** 钓场ID */
    @JsonSerialize(using = ToStringSerializer.class)
    @NotNull(message = "钓场ID不能为空")
    private Long deptId;

    /** 钓场名称 */
    private String deptName;

    /** 回鱼单价（按重量时为元/kg，按条数时为元/条） */
    @NotNull(message = "回鱼单价不能为空")
    @Positive(message = "回鱼单价必须大于0")
    private BigDecimal unitPrice;

    /** 回鱼总金额 */
    private BigDecimal totalAmount;

    /** 支付方式（1-微信，2-支付宝，3-现金等） */
    private Integer payType;

    /** 支付状态（0-未支付，1-已支付） */
    private Integer payStatus;

    /** 支付时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date payTime;

    /** 备注 */
    private String remark;

    /** 创建时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date createTime;

    /** 更新时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date updateTime;

    /** 逻辑删除标志（0-正常, 1-删除） */
    private Integer delFlag;

    // ========== 关联查询字段 ==========
    
    /** 订单编号 */
    private String orderNo;
    
    /** 用户姓名 */
    private String userName;
    
    /** 用户手机号 */
    private String userPhone;
    
    // ========== 查询参数字段 ==========
    
    /** 查询参数（包含时间范围等） */
    private Map<String, Object> params;
}